package com.bestcem.xm.member.dao.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.bestcem.xm.member.entity.mysql.MemberEntity;
import com.bestcem.xm.member.grpc.service.param.member.MemberQuery;
import com.bestcem.xm.member.service.param.DeliveryMembersDynamicSql;
import com.bestcem.xm.member.service.param.FuzzyMemberDynamicSql;
import com.bestcem.xm.member.service.param.SelectMemberDynamicSql;
import com.bestcem.xm.member.service.param.UpdateMemberGroupDynamicSql;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.Date;
import java.util.List;

@Mapper
public interface MemberMapper extends BaseMapper<MemberEntity> {
    /**
     * 获取联系人列表
     *
     * @param wrapper
     * @return
     */
    List<MemberEntity> selectMembers(@Param(Constants.WRAPPER) Wrapper<MemberEntity> wrapper);

    /**
     * 获取 orgId 下 指定 field value 的 联系人类型为 memberType 且状态为 status 的联系人
     *
     * @param orgId
     * @param field
     * @param value
     * @param memberType
     * @param status
     * @return
     */
    MemberEntity findByOrgIdAndFieldAndAttributeAndStatus(@Param("orgId") String orgId,
                                                          @Param("field") String field,
                                                          @Param("value") String value,
                                                          @Param("memberType") Integer memberType,
                                                          @Param("status") Integer status);

    /**
     * 创建联系人
     *
     * @param member
     * @return
     */
    void saveMember(MemberEntity member);

    /**
     * 根据 id 获取联系人信息
     *
     * @param id
     * @return
     */
    MemberEntity findById(@Param("id") String id);

    /**
     * 分页模糊查询联系人
     *
     * @param orgId      企业标识
     * @param memberType 联系人类型，为空时不区分类型
     * @param regexName  联系人名称模糊搜索参数，为空时不校验名称
     * @param offset     分页偏移量
     * @param size       分页大小
     * @return 联系人集合
     */
    List<MemberEntity> listMembersByRegexName(@Param("orgId") String orgId,
                                        @Param("memberType") Integer memberType,
                                        @Param("regexName") String regexName,
                                        @Param("offset") Integer offset,
                                        @Param("size") Integer size);

    Integer countMembersByRegexName(@Param("orgId") String orgId,
                                    @Param("memberType") Integer memberType,
                                    @Param("regexName") String regexName);

    /**
     * 获取 orgId 下 指定 field value 的 联系人类型为 memberType 的联系人
     *
     * @param orgId
     * @param field
     * @param value
     * @param memberType
     * @return
     */
    MemberEntity findByOrgIdAndFieldAndMemberType(@Param("orgId") String orgId,
                                                  @Param("field") String field,
                                                  @Param("value") String value,
                                                  @Param("memberType") Integer memberType);

    /**
     * 查询微信小程序用户
     * @param orgId
     * @param memberType
     * @param appId
     * @param openId
     * @return member
     */
    MemberEntity findByAppIdAndOpenId(@Param("orgId") String orgId,
                                      @Param("memberType") Integer memberType,
                                      @Param("appId") String appId,
                                      @Param("openId") String openId);

    /**
     * 查询微信小程序用户
     * @param orgId
     * @param memberType
     * @param appId
     * @param openId
     * @return member
     */
    List<MemberEntity> listByAppIdAndOpenId(@Param("orgId") String orgId,
                                      @Param("memberType") Integer memberType,
                                      @Param("appId") String appId,
                                      @Param("openId") String openId);

    /**
     * 根据 条件获取数据
     *
     * @param orgId
     * @param phone
     * @param email
     * @param aliPayUserId
     * @param openId
     * @param outNo
     * @param memberType
     * @return
     */
    List<MemberEntity> findByOrgIdAndMobileAndEmailAndAliPayUserIdAndOpenidAndAttribute(@Param("orgId") String orgId,
                                                                                        @Param("phone") String phone,
                                                                                        @Param("email") String email,
                                                                                        @Param("aliPayUserId") String aliPayUserId,
                                                                                        @Param("openId") String openId,
                                                                                        @Param("outNo") String outNo,
                                                                                        @Param("memberType") Integer memberType,
                                                                                        @Param("statusList") List<Integer> statusList);

    /**
     * 更新联系人
     *
     * @param member
     */
    void updateMember(MemberEntity member);

    /**
     * 批量根据id列表更新联系人状态
     *
     * @param ids
     * @param status
     * @return
     */
    long updateStatusByIds(@Param("list") List<String> ids, @Param("status") Integer status);

    /**
     * 更新所有满足条件的项目的扩展字段名
     * 注:因为相同扩展字段id可能有不同的值
     *
     * @param orgId      企业标识
     * @param memberType 联系人类型
     * @param fields     扩展字段信息
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/10/14
     */
    //int batchUpdateExtendFieldName(@Param("orgId") String orgId,
    //                               @Param("memberType") Integer memberType,
    //                               @Param("fields") List<ExtendFieldDO> fields);

    /**
     * 更新所有满足条件的项目的扩展字段值
     *
     * @param orgId      企业标识
     * @param memberType 联系人类型
     * @param fieldEnums 扩展字段信息
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/10/14
     */
    //int batchUpdateExtendFieldValue(@Param("orgId") String orgId,
    //                                @Param("memberType") Integer memberType,
    //                                @Param("fieldEnums") List<ExtendFieldEnumItemDO> fieldEnums);

    /**
     * 根据id列表获取联系人数据
     *
     * @param ids
     * @return
     */
    List<MemberEntity> findByIds(@Param("list") List<String> ids);

    /**
     * 查询手机号在参数范围内的激活的联系人
     *
     * @param orgId  企业标识
     * @param type   联系人类型
     * @param phones 手机号集合
     * @return 联系人集合 注：只有id,phone,email
     * @author dc.wang <dc.wang@idiaoyan.com>
     */
    List<MemberEntity> listMembersByPhones(@Param("orgId") String orgId,
                                           @Param("type") Integer type,
                                           @Param("phones") Collection<String> phones);

    /**
     * 查询邮箱在参数范围内的激活的联系人
     *
     * @param orgId  企业标识
     * @param type   联系人类型
     * @param emails 邮箱集合
     * @return 联系人集合 注：只有id,email
     * @author dc.wang <dc.wang@idiaoyan.com>
     */
    List<MemberEntity> listMembersByEmails(@Param("orgId") String orgId,
                                                   @Param("type") Integer type,
                                                   @Param("emails") Collection<String> emails);

    /**
     * 开放平台批量创建
     *
     * @param members 联系人
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/11/9
     */
    void batchInsertMembers(@Param("members") List<MemberEntity> members);

    /**
     * 开放平台批量更新联系人，完全覆盖更新
     *
     * @param members 联系人
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/11/9
     */
    void batchUpdateOpenPlatformMembers(@Param("members") List<MemberEntity> members);

    /**
     * 获取 该组织下指定联系人的数量
     *
     * @param orgId      组织id
     * @param memberType 联系人类型
     * @return
     */
    Long countByOrgIAndMemberType(@Param("orgId") String orgId, @Param("memberType") int memberType);

    /**
     * 获取 该组织下 机构联系人的 指定属性的
     *
     * @param orgId
     * @param value
     * @param field
     * @return
     */
    Long countInstituteMembersByContactInfo(@Param("orgId") String orgId, @Param("value") String value, @Param("field") String field);

    /**
     * 获取该组织下 指定属性的联系人
     *
     * @param orgId
     * @param value
     * @param field
     * @param status
     * @return
     */
    Long countByContactInfo(@Param("orgId") String orgId,
                            @Param("value") String value,
                            @Param("field") String field,
                            @Param("status") int status);

    /**
     * 分页获取数据
     *
     * @param orgId
     * @param value
     * @param field
     * @param start
     * @param size
     * @return
     */
    List<MemberEntity> listInstituteMembersByContactInfo(@Param("orgId") String orgId,
                                                         @Param("value") String value,
                                                         @Param("field") String field,
                                                         @Param("start") int start,
                                                         @Param("size") int size);

    /**
     * 分页获取数据
     *
     * @param orgId
     * @param value
     * @param field
     * @param memberType
     * @param start
     * @param size
     * @return
     */
    List<MemberEntity> listByContactInfo(@Param("orgId") String orgId,
                                         @Param("value") String value,
                                         @Param("field") String field,
                                         @Param("memberType") int memberType,
                                         @Param("start") int start,
                                         @Param("size") int size);

    /**
     * 判断机构名称是否冲突
     *
     * @param orgId
     * @param instituteName
     * @param status
     * @return
     */
    Integer countByOrgIdAndInstituteNameAndNotEqualStatus(@Param("orgId") String orgId,
                                                          @Param("instituteName") String instituteName,
                                                          @Param("status") int status);

    /**
     * 更新该组织下指定联系人的状态
     *
     * @param status
     * @param orgId
     * @param attribute
     */
    void updateStatusByOrgIdAndAttribute(@Param("status") int status,
                                         @Param("orgId") String orgId,
                                         @Param("memberType") Integer attribute,
                                         @Param("updateTime") Date updateTime);

    /**
     * 获取该组织下 指定机构名称的 联系人
     *
     * @param orgId
     * @param instituteName
     * @param status
     * @return
     */
    List<MemberEntity> findByOrgIdAndInstituteNameAndStatusNot(@Param("orgId") String orgId,
                                                               @Param("instituteName") String instituteName,
                                                               @Param("status") Integer status);

    /**
     * 获取 指定名称 联系人类型 非status 的数据
     *
     * @param name
     * @param memberType
     * @param status
     * @return
     */
    MemberEntity findOneByNameAndMtypeAndStatusNe(@Param("name") String name,
                                                  @Param("memberType") int memberType,
                                                  @Param("status") int status);

    /**
     * 根据userId 获取用户信息
     *
     * @param orgId
     * @param userId
     * @return
     */
    MemberEntity findByUserId(@Param("orgId") String orgId, @Param("userId") String userId);

    /**
     * 通过动态sql查询
     *
     * @param queryWrapper
     * @param wrapper
     * @return
     */
    Integer countByDynamicSql(@Param("query") SelectMemberDynamicSql queryWrapper, @Param(Constants.WRAPPER) Wrapper<MemberEntity> wrapper);

    /**
     * 通过动态sql查询
     *
     * @param dynamicSql
     * @param wrapper
     * @return
     */
    List<MemberEntity> filterMembersByDynamicSql(@Param("query") SelectMemberDynamicSql dynamicSql, @Param(Constants.WRAPPER) Wrapper<MemberEntity> wrapper);

    /**
     * 查询投放条件解析联系人数量
     *
     * @param query 查询参数
     * @param wrapper
     * @return 联系人总数
     */
    Integer countDeliveryMembers(@Param("query") DeliveryMembersDynamicSql query,
                                 @Param(Constants.WRAPPER) Wrapper<MemberEntity> wrapper);

    /**
     * 分页查询投放条件解析联系人
     * 注：分页参数不存在查询所有
     *
     * @param query 查询参数
     * @param wrapper
     * @return 联系人集合
     */
    List<MemberEntity> listDeliveryMembers(@Param("query") DeliveryMembersDynamicSql query,
                                           @Param(Constants.WRAPPER) Wrapper<MemberEntity> wrapper);

    /**
     * @param orgId
     * @param field
     * @param value
     * @param memberType
     * @param status
     * @return
     */
    MemberEntity findByOrgIdAndFieldAndAttributeAndStatusNe(@Param("orgId") String orgId,
                                                            @Param("field") String field,
                                                            @Param("value") String value,
                                                            @Param("memberType") Integer memberType,
                                                            @Param("status") int status);

    /**
     * 统计 该组织下 指定联系人类型和状态的数量
     *
     * @param orgId
     * @param memberType
     * @param status
     * @return
     */
    Long countByOrgIAndMemberTypeAndStatus(@Param("orgId") String orgId,
                                           @Param("memberType") Integer memberType,
                                           @Param("status") int status);

    /**
     * 根据动态条件查询
     *
     * @param wrapper
     * @return
     */
    List<MemberEntity> findByWrapper(@Param(Constants.WRAPPER) QueryWrapper wrapper);

    /**
     * 根据动态条件查询
     *
     * @param sql
     * @param wrapper
     * @return
     */
    List<MemberEntity> findByFuzzyMemberDynamicSql(@Param("query") FuzzyMemberDynamicSql sql, @Param(Constants.WRAPPER) Wrapper<MemberEntity> wrapper);

    /**
     * 获取联系人数据
     *
     * @param orgId
     * @param memberType
     * @param offset
     * @param size
     * @return
     */
    List<MemberEntity> findPageByOrgIdAndMemberType(@Param("orgId") String orgId,
                                                    @Param("memberType") Integer memberType,
                                                    @Param("start") Integer offset,
                                                    @Param("size") Integer size);

    /**
     * 删除所有满足条件的项目的扩展字段信息
     * 注:因为相同扩展字段id可能有不同的值
     *
     * @param orgId    企业标识
     * @param fieldIds 扩展字段id
     * @author dc.wang <dc.wang@idiaoyan.com>
     * @date 2021/10/14
     */
    //int batchDeleteExtendField(String orgId, Integer memberType, Collection<String> fieldIds);

    /**
     * 测试用
     *
     * @param entities
     */
    void batchSave(List<MemberEntity> entities);

    /**
     * 获取联系人列表
     *
     * @param orgId
     * @param attribute
     * @param status
     * @param startOffset
     * @param pageSize
     * @return
     */
    List<MemberEntity> findByOrgIdAndAttributeAndStatus(@Param("orgId") String orgId,
                                                        @Param("attribute") int attribute,
                                                        @Param("status") int status,
                                                        @Param("startOffset") String startOffset,
                                                        @Param("pageSize") int pageSize);

    /**
     * 获取单个联系人
     *
     * @param orgId
     * @param attribute
     * @param status
     * @param startOffset
     * @param pageSize
     * @return
     */
    MemberEntity findOneByOrgIdAndAttributeAndStatus(@Param("orgId") String orgId,
                                                     @Param("attribute") int attribute,
                                                     @Param("status") int status,
                                                     @Param("startOffset") String startOffset,
                                                     @Param("pageSize") int pageSize);

    /**
     * 更新联系人标签
     *
     * @param memberId
     * @param labels
     */
    void updateMemberLabelById(@Param("id") String memberId, @Param("labels") String labels);

    /**
     * 获取扩展字段不为空的的人员
     *
     * @param orgId orgId
     * @param memberType memberType
     *
     * @return 人员
     */
    List<MemberEntity> findExtendExistsMember(String orgId, Integer memberType);

    /**
     * 更新联系人标签
     *
     * @param memberList memberList
     */
    void updateMemberByField(@Param("memberList") List<MemberEntity> memberList);

    /**
     * 统计联系人数量
     * 若 orgId 存在则统计 改orgId 下的联系人数量
     *
     * @param orgId
     * @return
     */
    Long countMember(@Param("orgId") String orgId);

    /**
     * @param orgId
     * @param start
     * @param batchCount
     */
    List<MemberEntity> findMember(@Param("orgId") String orgId, @Param("start") int start, @Param("batchCount") Integer batchCount);

    Long countByOrgIAndMemberTypeAndStatusNe(@Param("orgId") String orgId,
                                             @Param("memberType") int memberType,
                                             @Param("status") int status);

    /**
     * 获取该组织下指定状态的联系人
     *
     * @param orgId
     * @param status
     * @return
     */
    List<MemberEntity> findByOrgIdAndStatus(@Param("orgId") String orgId, @Param("status") int status);


    /**
     * 查询联系人数量
     *
     * @param orgId
     * @param memberType
     * @param status
     * @param source
     * @return
     */
    long countByOrgIAndMemberTypeAndStatusAndSourceNe(@Param("orgId") String orgId,
                                                      @Param("memberType") int memberType,
                                                      @Param("status") int status,
                                                      @Param("source") String source);

    /**
     * 查询联系人数量
     *
     * @param orgId
     * @param memberType
     * @param startCreateTime
     * @param endCreateTime
     * @param startUpdateTime
     * @param endUpdateTime
     * @return
     */
    Long countByPeriod(@Param("orgId") String orgId,
                       @Param("memberType") int memberType,
                       @Param("startCreateTime") Date startCreateTime,
                       @Param("endCreateTime") Date endCreateTime,
                       @Param("startUpdateTime") Date startUpdateTime,
                       @Param("endUpdateTime") Date endUpdateTime);

    /**
     * 获取联系人
     *
     * @param orgId
     * @param memberType
     * @param startCreateTime
     * @param endCreateTime
     * @param startUpdateTime
     * @param endUpdateTime
     * @param offset
     * @param size
     * @return
     */
    List<MemberEntity> listMemberByPeriod(@Param("orgId") String orgId,
                                          @Param("memberType") int memberType,
                                          @Param("startCreateTime") Date startCreateTime,
                                          @Param("endCreateTime") Date endCreateTime,
                                          @Param("startUpdateTime") Date startUpdateTime,
                                          @Param("endUpdateTime") Date endUpdateTime,
                                          @Param("offset") Integer offset,
                                          @Param("size") Integer size);

    /**
     * 获取数据
     *
     * @param orgId
     * @param memberType
     * @param instituteName
     * @param status
     * @return
     */
    List<MemberEntity> findByOrgIdAndMemberTypeAndInstituteNameAndStatusNot(@Param("orgId") String orgId,
                                                                            @Param("memberType") int memberType,
                                                                            @Param("instituteName") String instituteName,
                                                                            @Param("status") int status);

    /**
     * 查询拥有GroupSyncToken的联系人（表示分组还未完成）
     *
     * @param orgId
     * @param memberType
     * @param status
     * @return
     */
    MemberEntity findOneByOrgIdAndMemberTypeAndStatusAndGroupSyncToken(@Param("orgId") String orgId,
                                                                       @Param("memberType") int memberType,
                                                                       @Param("status") int status);

    /**
     * 根据联系人id和状态查询联系人
     *
     * @param memberId
     * @param orgId
     * @param memberType
     * @param status
     * @return
     */
    MemberEntity findOneByIdAndStatus(@Param("memberId") String memberId,
                                      @Param("orgId") String orgId,
                                      @Param("memberType") int memberType,
                                      @Param("status") int status);

    /**
     * 更新 GroupSyncToken
     *
     * @param memberId
     * @param newGroupSyncToken
     * @param oldGroupSyncToken
     */
    void updateMemberGroupSyncToken(@Param("memberId") String memberId,
                                    @Param("newGroupSyncToken") String newGroupSyncToken,
                                    @Param("oldGroupSyncToken") String oldGroupSyncToken);

    /**
     * 更新分组
     *
     * @param groups
     * @param memberId
     * @param groupSyncToken
     * @return
     */
    Integer updateMemberGroups(@Param("groups") String groups,
                               @Param("memberId") String memberId,
                               @Param("groupSyncToken") String groupSyncToken);

    /**
     * 根据 orgId memberType status  endTime 查询联系人
     *
     * @param orgId      公司id
     * @param memberType 联系人类型
     * @param status     联系人状态
     * @param endTime    结束时间
     * @param offset     偏移量
     * @param limit      限制
     * @return 联系人实体
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 14:06 2022/1/17
     */
    MemberEntity findOneByOrgIdAndMemberTypeAndStatusAndCreateTime(String orgId, int memberType, int status, Date endTime, long offset, int limit);

    /**
     * 根据 orgId memberType status currTime 查询联系人数量
     *
     * @param orgId      公司id
     * @param memberType 联系人类型
     * @param status     联系人状态
     * @param currTime   当前时间
     * @return 联系人数量
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 14:06 2022/1/17
     */
    Long countByOrgIdAndMemberTypeAndStatusAndCreateTime(String orgId, int memberType, int status, Date currTime);

    /**
     * 根据 orgId memberType status seq currTime 查询联系人数量
     *
     * @param orgId      公司id
     * @param memberType 联系人类型
     * @param status     联系人状态
     * @param currTime   当前时间
     * @param seq        分组seq
     * @return 联系人数量
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 14:06 2022/1/17
     */
    Long countByOrgIdAndMemberTypeAndStatusAndGroupsAndCreateTime(String orgId, int memberType, int status, Long seq, Date currTime);

    /**
     * 统计数量
     *
     * @param orgId
     * @param memberType
     * @param status
     * @param seq
     * @return
     */
    Long countByOrgIdAndMemberTypeAndStatusAndSeq(@Param("orgId") String orgId,
                                                  @Param("memberType") int memberType,
                                                  @Param("status") int status,
                                                  @Param("seq") Long seq);

    /**
     * 删除联系人指定分组
     *
     * @param orgId
     * @param memberType
     * @param status
     * @param seq
     * @param startTime
     * @param endTime
     */
    //void deleteGroup(@Param("orgId") String orgId,
    //                 @Param("memberType") int memberType,
    //                 @Param("status") int status,
    //                 @Param("seq") Long seq,
    //                 @Param("startTime") Date startTime,
    //                 @Param("endTime") Date endTime);
    /**
     * 删除联系人指定分组
     *
     * @param orgId
     * @param memberType
     * @param status
     * @param seq
     * @param startTime
     * @param endTime
     */
    List<MemberEntity> findGroupByParam(@Param("orgId") String orgId,
                     @Param("memberType") int memberType,
                     @Param("status") int status,
                     @Param("seq") Long seq,
                     @Param("startTime") Date startTime,
                     @Param("endTime") Date endTime);

    /**
     * 修改联系人指定分组
     *
     * @param memberList
     */
    void updateGroups(@Param("memberList") List<MemberEntity> memberList);

    /**
     * 根据 orgId memberType status seq endTime 查询联系人数量
     *
     * @param orgId      公司id
     * @param memberType 联系人类型
     * @param status     联系人状态
     * @param seq        分组seq
     * @param endTime   当前时间
     * @return 联系人数量
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 14:06 2022/1/17
     */
    MemberEntity findOneByOrgIdAndMemberTypeAndStatusAndGroupsAndCreateTime(String orgId, int memberType, int status, Long seq, Date endTime, long offset, int limit);

    /**
     * 通过动态查询条件更新联系人
     *
     * @param dynamicSql 动态sql
     * @return 影响行数
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 16:13 2022/1/17
     */
    Integer updateByDynamicSql(@Param("query") UpdateMemberGroupDynamicSql dynamicSql, @Param(Constants.WRAPPER) Wrapper<MemberEntity> wrapper);

    /**
     * 获取即将删除的联系人
     *
     * @param dynamicSql
     * @param wrapper
     */
    List<MemberEntity> findDeleteMembers(@Param("query") SelectMemberDynamicSql dynamicSql, @Param(Constants.WRAPPER) Wrapper<MemberEntity> wrapper);

    /**
     * 根据id 列表删除联系人
     *
     * @param ids
     * @param updateTime
     */
    void deleteByIds(@Param("list") List<String> ids, @Param("updateTime") Date updateTime);

    /**
     *
     *
     * @param orgId
     * @param outNo
     * @param memberType
     * @param status
     * @return
     */
    MemberEntity findOneByOrgIdAndOutNoAndAttributeAndStatus(@Param("orgId") String orgId,
                                                             @Param("outNo") String outNo,
                                                             @Param("memberType") Integer memberType,
                                                             @Param("status") int status);

    /**
     * 获取数据
     *
     * @param orgId
     * @param memberType
     * @param status
     * @param appId
     * @param openId
     * @return
     */
    MemberEntity findOneByOrgIdAndMemberTypeAndStatusAndAppIdAndOpenId(@Param("orgId") String orgId,
                                                                       @Param("memberType") int memberType,
                                                                       @Param("status") int status,
                                                                       @Param("appId") String appId,
                                                                       @Param("openId") String openId);

    List<MemberEntity> findByWx(@Param("memberType") Integer memberType,
                                @Param("orgId") String orgId,
                                @Param("status") Integer status,
                                @Param("list") List<MemberQuery> queryParams);

    /**
     * 根据修改时间 查询数据
     *
     * @param time
     * @param start
     * @param batchCount
     * @return
     */
    List<MemberEntity> findByUpdateTimeAfter(@Param("time") String time, @Param("start") int start, @Param("batchCount") int batchCount);
}
